package com.xux.service;

import cn.hutool.json.JSONArray;
import com.xux.enums.OperateTypes;

/**
 * canal数据消息处理.
 * @author xux
 */
public interface ICanalDataProcess {

    /**
     * mysql的binlog数据处理.
     *
     * @param types     binlog操作类型
     * @param jsonArray binlog操作数据
     */
    default void process(final OperateTypes types, final JSONArray jsonArray) {
        switch (types) {
            case INSERT:
                processInsert(jsonArray);
                break;
            case DELETE:
                processDelete(jsonArray);
                break;
            case UPDATE:
                processUpdate(jsonArray);
                break;
            default:
                break;
        }
    }

    /**
     * 表示是否支持 table 表的处理.
     *
     * @param table 数据库的表名
     * @return 是否支持
     */
    boolean support(String table);

    /**
     * 处理insert语句.
     *
     * @param jsonArray 需要处理的数据
     */
    default void processInsert(JSONArray jsonArray) {
    }

    /**
     * 处理update语句.
     *
     * @param jsonArray 需要处理的数据
     */
    default void processUpdate(JSONArray jsonArray) {
    }

    /**
     * 处理delete语句.
     *
     * @param jsonArray 需要处理的数据
     */
    default void processDelete(JSONArray jsonArray) {
    }
}
